package ar.edu.phm.tp.cuatro.planificacionDsl.validation

import ar.edu.phm.tp.cuatro.planificacionDsl.planificacion.Docente
import ar.edu.phm.tp.cuatro.planificacionDsl.planificacion.Exclusiva
import ar.edu.phm.tp.cuatro.planificacionDsl.planificacion.PlanificacionPackage
import ar.edu.phm.tp.cuatro.planificacionDsl.planificacion.Semi
import ar.edu.phm.tp.cuatro.planificacionDsl.planificacion.Simple
import org.eclipse.xtext.validation.Check

class DocenteValidator extends AbstractPlanificacionValidator {
	public static val NUMERO_INVALIDO_DE_MATERIAS = "NUMERO_INVALIDO_DE_MATERIAS"

	@Check
	def cantidadDeMateriasPorProfesor(Docente profe) {
		controlarCantidadMaterias(profe.tipo, profe, profe.materias.size)
	}

	def dispatch controlarCantidadMaterias(Simple d, Docente profe, int cant) {
		if (cant != 1)
			generarErrorPorNroDeMaterias(profe, "Los profesores con dedicacion simple deben dar 1  Materias")
	}

	def dispatch controlarCantidadMaterias(Semi d, Docente profe, int cant) {
		if (cant != 2)
			generarErrorPorNroDeMaterias(profe, "Los profesores con dedicacion semi deben dar 2  Materias")
	}

	def dispatch controlarCantidadMaterias(Exclusiva d, Docente profe, int cant) {
		if (cant < 2 || cant > 5)
			generarErrorPorNroDeMaterias(profe, "Los profesores con dedicacion exclusiva deben dar entre 2 y 5 Materias")
	}

	def generarErrorPorNroDeMaterias(Docente profe, String mje) {
		error(mje, profe, PlanificacionPackage.Literals.DOCENTE__TIPO, NUMERO_INVALIDO_DE_MATERIAS)
	}

}
